using Unity.Mathematics;

// 该结构体用于表示一个空间中的变换（平移、旋转、缩放），类似于Unity中的Transform组件
[System.Serializable] // 使得该结构体可以在Inspector面板中序列化显示，方便在编辑器中调整参数
public struct SpaceTRS
{
	// 平移向量，表示物体在世界空间中的位置偏移
	public float3 translation;

	// 旋转角度，以欧拉角形式表示（单位：度），分别对应 X、Y、Z 轴的旋转
	public float3 rotation;

	// 缩放向量，表示物体在 X、Y、Z 三个轴向上的缩放比例
	public float3 scale;

	// 只读属性：根据当前的 translation, rotation, scale 计算并返回一个 float3x4 的变换矩阵
	public float3x4 Matrix
	{
		get
		{
			// 使用 Unity.Mathematics 的 TRS 函数构造一个 float4x4 的变换矩阵：
			// - translation：平移
			// - quaternion.EulerZXY(math.radians(rotation))：将欧拉角（度）转换为弧度，并构建一个按照 ZXY 顺序旋转的四元数
			// - scale：缩放
			float4x4 m = float4x4.TRS(
				translation,
				quaternion.EulerZXY(math.radians(rotation)),
				scale
			);

			// 从 float4x4 矩阵中提取前 3 行（即 c0, c1, c2, c3 的 xyz 分量）组成一个 float3x4 矩阵并返回
			// float3x4 通常用于只包含位置和方向信息，不包含齐次坐标的变换（比如用于顶点变换等）
			return math.float3x4(m.c0.xyz, m.c1.xyz, m.c2.xyz, m.c3.xyz);
		}
	}
}